import { http } from "@/utils/http";
import type { RequestResponse } from "./types";

export const followApi = {
  getFollowUpPlanTaskSearchApi: (data: params1) => {
    return http.request<RequestResponse<searchResponse>>(
      "post",
      "/api/v1/hdl/app/plan/task/search",
      { data }
    );
  },
  getFollowUpPlanDoctorHealthManager: () => {
    return http.request<RequestResponse<any>>(
      "get",
      "/api/v1/hdl/app/doctor/healthManager"
    );
  },
  getFollowUpPlanFollowUpInfo: (params: params2) => {
    return http.request<RequestResponse<FollowUpTaskParams>>(
      "get",
      "/api/v1/hdl/app/plan/followUp/info",
      { params }
    );
  },
  getFollowUpPlanFollowUpCreate: (data: HealthPlanCreateFrom) => {
    return http.request<RequestResponse<any>>(
      "post",
      "/api/v1/hdl/app/plan/followUp/create",
      { data }
    );
  },
  getFollowUpPlanFollowUpUpdate: (data: HealthPlanCreateFrom) => {
    return http.request<RequestResponse<any>>(
      "post",
      "/api/v1/hdl/app/plan/followUp/update",
      { data }
    );
  },
  // 体检计划
  getFollowUpPlanTaskInfo: (params: params2) => {
    return http.request<RequestResponse<HealthPlanUpdateFrom>>(
      "get",
      "/api/v1/hdl/app/plan/healthPlan/info",
      { params }
    );
  },
  // 体检计划
  getFollowUpPlanHealthPlanUpdate: (data: HealthPlanCreateFrom) => {
    return http.request<RequestResponse<any>>(
      "post",
      "/api/v1/hdl/app/plan/healthPlan/update",
      { data }
    );
  },
  // 体检计划
  getFollowUpPlanHealthPlanCreate: (data: HealthPlanCreateFrom) => {
    return http.request<RequestResponse<any>>(
      "post",
      "/api/v1/hdl/app/plan/healthPlan/create",
      { data }
    );
  },
  getFollowUpPlanCondition: (params: { userId: number }) => {
    return http.request<RequestResponse<any>>(
      "get",
      "/api/v1/hdl/app/plan/condition",
      { params }
    );
  },
  // 疫苗创建 /api/v1/hdl/app/plan/vaccination/create
  getFollowUpPlanVaccinationCreate: (data: VaccinationTaskParams) => {
    return http.request<RequestResponse<any>>(
      "post",
      "/api/v1/hdl/app/plan/vaccination/create",
      { data }
    );
  },
  // 疫苗更新 /api/v1/hdl/app/plan/vaccination/update
  getFollowUpPlanVaccinationUpdate: (data: VaccinationTaskParams) => {
    return http.request<RequestResponse<any>>(
      "post",
      "/api/v1/hdl/app/plan/vaccination/update",
      { data }
    );
  },
  // 疫苗查询 /api/v1/hdl/app/plan/vaccination/info
  getFollowUpPlanVaccinationInfo: (params: params2) => {
    return http.request<RequestResponse<VaccinationUpdateFrom>>(
      "get",
      "/api/v1/hdl/app/plan/vaccination/info",
      { params }
    );
  },
  getFollowUpPlanFollowUpCancel: (data: {
    planId: number;
    planType: number;
  }) => {
    return http.request<RequestResponse<any>>(
      "post",
      "/api/v1/hdl/app/plan/cancel",
      { data }
    );
  },
  cancelTask: (data: { taskId: number }) => {
    return http.request<RequestResponse<any>>(
      "post",
      "/api/v1/hdl/app/plan/task/cancel",
      { data }
    );
  },
  // /api/v1/hdl/app/plan/task/detail
  getFollowUpPlanTaskDetail: (params: { taskId: number | string }) => {
    return http.request<RequestResponse<any>>(
      "get",
      "/api/v1/hdl/app/plan/task/detail",
      { params }
    );
  },
  // 获取随访计划详情
  getFollowPlanDetail: (params: { planId: number | string }) => {
    return http.request<RequestResponse<FollowPlanDetailResponse>>(
      "get",
      "/api/v1/hdl/app/plan/followUp/info",
      { params }
    );
  },

  // 获取医生服务用户列表
  getDoctorServiceUsers: (params: { userId: number }) => {
    return http.request<RequestResponse<ServiceUser[]>>(
      "get",
      "/api/v1/hdl/app/doctor/serviceUser",
      { params }
    );
  }
};
// 服务用户信息接口
export interface ServiceUser {
  userId: number;
  userName: string;
}

// 随访计划详情返回数据类型
export interface FollowPlanDetailResponse {
  userId: number;
  plansPeriodId: number;
  startDate: string;
  endDate: string;
  time: string;
  notes: string;
  planId: number;
}
interface params1 {
  taskType?: number; // 任务类型（1：随访计划，2：疫苗计划，3：体检计划），可选
  userName?: string; // 用户姓名，可选 示例值: 王琳琳
  startDate: string; // 开始时间（毫秒时间戳），必需
  endDate: string; // 结束时间（毫秒时间戳），必需
  healthManagerId?: number; // 健管师Id，整数类型，可选
}

interface TaskDetail {
  taskId?: number; // 任务ID，可选
  planId?: number; // 计划ID，可选
  taskType?: number; // 任务类型（1:随访计划, 2:疫苗计划, 3:体检计划），可选
  taskTypeName?: string; // 任务类型名称，可选
  userId?: number; // 用户ID(高管/家属)，可选
  userName?: string; // 用户姓名，可选
  userAvatar?: string; // 报告用户头像，可选
  familyMemberName?: string; // 家庭成员姓名，可选
  followUpUserId?: number; // 随访人ID (关联医生/健管师)，可选
  followUpUserName?: string; // 随访人姓名，可选
  followUpUserRole?: string; // 随访人角色，可选
  followUpUserAvatar?: string; // 随访人头像，可选
  startDate?: number; // 开始日期（时间戳，毫秒），可选
  endDate?: number; // 结束日期（时间戳，毫秒），可选
}

interface searchResponse {
  finishedCount?: number; // 已完成-任务量，可选
  unfinishedCount?: number; // 未完成-任务量，可选
  canceledCount?: number; // 已取消-任务量，可选
  taskDetailList: TaskDetail[]; // 任务详情列表
}

interface params2 {
  planId: number; // 任务ID，必需
}

/**
 * 随访计划任务参数接口
 * 详细字段说明见注释，所有字段均需严格按照后端接口文档要求传递
 */
interface FollowUpTaskParams {
  userId: number; // 被随访用户ID，必需
  plansPeriodId: number; // 计划周期ID，必需
  startDate: string; // 开始时间戳(毫秒)，必需。例如: "1642219200000"
  endDate: string; // 结束时间戳(毫秒)，必需。例如: "1642219200000"
  executionTime: string; // 随访时间，必需。例如: "08:00-09:00"
  notes?: string; // 备注，可选
  planId?: number; // 计划ID，可选
}

/**
 * VaccinationCreateFrom
 */
export interface VaccinationTaskParams {
  /**
   * 是否标记为尽快接种（1:否，2:是）
   */
  asap?: number;
  /**
   * 当前计划的剂次 (如: 第2剂)
   */
  currentDoseNumber?: number;
  /**
   * (无禁忌则为NULL或空)
   */
  precautions?: string;
  /**
   * 下一剂的推荐接种日期(毫秒时间戳)
   */
  recommendedDate?: string;
  /**
   * 该疫苗计划总剂次
   */
  totalDoses?: number;
  /**
   * 用户ID
   */
  userId: number;
  /**
   * 本次接种时间(毫秒时间戳)
   */
  vaccinationDate: string;
  /**
   * 疫苗类型ID
   */
  vaccineType: number;
  /**
   * 建议接种时间窗结束日期(毫秒时间戳)
   */
  windowEndDate?: string;
  /**
   * 建议接种时间窗开始日期(毫秒时间戳)
   */
  windowStartDate?: string;
}

/**
 * VaccinationUpdateFrom
 */
export interface VaccinationUpdateFrom {
  /**
   * 是否标记为尽快接种（1:否，2:是）
   */
  asap?: number;
  /**
   * 当前计划的剂次 (如: 第2剂)
   */
  currentDoseNumber?: number;
  /**
   * 计划ID
   */
  planId: number;
  /**
   * (无禁忌则为NULL或空)
   */
  precautions?: string;
  /**
   * 下一剂的推荐接种日期(毫秒时间戳)
   */
  recommendedDate?: string;
  /**
   * 该疫苗计划总剂次
   */
  totalDoses?: number;
  /**
   * 用户ID
   */
  userId: number;
  /**
   * 本次接种时间(毫秒时间戳)
   */
  vaccinationDate: string;
  /**
   * 疫苗类型ID
   */
  vaccineType: number;
  /**
   * 建议接种时间窗结束日期(毫秒时间戳)
   */
  windowEndDate?: string;
  /**
   * 建议接种时间窗开始日期(毫秒时间戳)
   */
  windowStartDate?: string;
}

/**
 * PlansConditionVO
 */
export interface PlansConditionVO {
  /**
   * 健康分类
   * 场景：创建随访计划
   */
  healthCategoryTagName?: string;
  /**
   * 体检计划 -> 体检项目
   * 场景：新增，修改体检计划
   */
  indicatorLibraryList?: IndicatorLibraryDTO[];
  /**
   * 计划周期
   * 例如: 每天、每星期、每月等
   * 场景：创建随访计划
   */
  plansPeriodList?: DataConditionVO[];
  /**
   * 计划分类
   * 例如：随访计划、疫苗计划、体检计划等
   * 场景：查询随访计划
   */
  plansTypeList?: DataConditionVO[];
  /**
   * 建议计划ID
   * 场景：创建随访计划
   */
  RecommendedPlanId?: string;
  /**
   * 疫苗计划分类
   * 例如：流感疫苗、乙肝疫苗、麻疹疫苗等
   * 场景：创建疫苗计划
   */
  vaccinationType?: DataConditionVO[];
}

/**
 * IndicatorLibraryDTO
 */
export interface IndicatorLibraryDTO {
  /**
   * 分类ID
   * 场景：
   * 1.如果选择模版分类，必传
   * 2.新增体检项，非必传
   */
  categoryId?: number;
  /**
   * 分类名称
   */
  categoryName: string;
  /**
   * 项目名称
   */
  itemName: string[];
}

/**
 * DataConditionVO
 */
export interface DataConditionVO {
  /**
   * 条件ID
   */
  id?: number;
  /**
   * name
   */
  name?: string;
}

/**
 * HealthPlanUpdateFrom
 */
export interface HealthPlanUpdateFrom {
  /**
   * 体检项目
   */
  itemList: IndicatorLibraryDTO[];
  /**
   * 计划ID
   */
  planId: number;
  /**
   * 建议体检时间(毫秒)
   */
  recommendedDate: string;
  /**
   * 体检用户ID
   */
  userId: number;
}

/**
 * IndicatorLibraryDTO
 */
export interface IndicatorLibraryDTO {
  /**
   * 分类ID
   * 场景：
   * 1.如果选择模版分类，必传
   * 2.新增体检项，非必传
   */
  categoryId?: number;
  /**
   * 分类名称
   */
  categoryName: string;
  /**
   * 项目名称
   */
  itemName: string[];
}

/**
 * HealthPlanCreateFrom
 */
export interface HealthPlanCreateFrom {
  /**
   * 体检项目
   */
  itemList: IndicatorLibraryDTO[];
  /**
   * 建议体检时间(毫秒)
   */
  recommendedDate: string;
  /**
   * 体检用户ID
   */
  userId: number;
}

/**
 * IndicatorLibraryDTO
 */
export interface IndicatorLibraryDTO {
  /**
   * 分类ID
   * 场景：
   * 1.如果选择模版分类，必传
   * 2.新增体检项，非必传
   */
  categoryId?: number;
  /**
   * 分类名称
   */
  categoryName: string;
  /**
   * 项目名称
   */
  itemName: string[];
}

// 随访计划详情返回数据类型
export interface FollowPlanDetailResponse {
  userId: number;
}
